<?php


namespace api\modules\v1\controllers\buss;

use api\controllers\OnAuthController;
use api\modules\v1\forms\buss\ToolForm;
use common\helpers\CommonHelper;
use services\base\ToolCategoryService;
use services\buss\ToolService;
use Yii;


class ToolController extends OnAuthController
{
    public $modelClass = '';

    /**
     * @api {get} /v1/buss/tool/list  工具列表
     * @apiName list
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiParam {String} created_stime     创建开始时间【格式：YYYY-MM-DD】
     * @apiParam {String} created_etime     创建结束时间【格式：YYYY-MM-DD】
     * @apiParam {String} tag_ids           标签IDs【数组 or string 多个用','分割】
     * @apiParam {String} keyword           关键词【文件名、标题、简介】
     * @apiParam {String} created_member_id 创建人ID
     * @apiParam {Number} status            状态
     * @apiParam {String} order_column      排序字段【最新上传：created_at、最多下载：download_total_num】
     * @apiParam {String} order_sort        排序值【asc升序、desc降序】
     * @apiParam {String} project_ids       项目IDs【数组 or string 多个用','分割】
     * @apiParam {String} age_ids           年龄IDs【数组 or string 多个用','分割】
     * @apiParam {String} actegory_ids      分类IDs【数组 or string 多个用','分割】
     * @apiParam {String} page              页码
     * @apiParam {String} pageSize          每页展示数
     *
     * @apiSuccess {Object}  data                       返回数据
     * @apiSuccess {Number}  data.page                  页码
     * @apiSuccess {Number}  data.pageSize              每页展示数
     * @apiSuccess {Number}  data.total                 总数
     * @apiSuccess {Array}   data.list                  列表数据
     * @apiSuccess {Number}  data.list.id               ID
     * @apiSuccess {String}  data.list.name             工具名称
     * @apiSuccess {String}  data.list.download_image_num 图片下载次数
     * @apiSuccess {String}  data.list.download_video_num 视频下载次数
     * @apiSuccess {String}  data.list.download_total_num 总下载次数
     * @apiSuccess {String}  data.list.thumb_url        缩略图
     * @apiSuccess {Object}  data.condition             筛选条件
     * @apiSuccess {Array}   data.condition.status      状态【{value:'0', label: '普通'}】
     * @apiSuccess {Array}   data.condition.created_member 创建人
     * @apiSuccess {Array}   data.condition.tag         标签
     */
    public function actionList()
    {
        $params = Yii::$app->request->get();

        $page = $params['page'] ?? 1;
        $pageSize = $params['pageSize'] ?? 10;

        $service = new ToolService();
        // 查询结果
        $data = $service->getListPage($params, (int)$page, (int)$pageSize);
        // 格式化数据
        $data['list'] = $service->getListPageFormat($data['list']);
        // 筛选项
        $data['condition'] = $service->getSelectCondition();
        return $data;
    }

    /**
     * @api {get} /v1/buss/tool/category-list  工具分类列表
     * @apiName category-list
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiSuccess {Array}   data                   返回数据
     * @apiSuccess {Number}  data.value             ID
     * @apiSuccess {String}  data.label             名称
     * @apiSuccess {Number}  data.pid               父级ID
     * @apiSuccess {Array}   data.children          子级
     * @apiSuccess {Number}  data.is_age            是否为年龄【年龄单独提出筛选】
     */
    public function actionCategoryList()
    {
        return ToolCategoryService::getListTree();
    }

    /**
     * @api {get} /v1/buss/tool/info 工具详情
     * @apiName info
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiSuccess {Object} data                    返回数据
     * @apiSuccess {Number} data.id                 ID
     * @apiSuccess {String} data.project_name       项目名称
     * @apiSuccess {String} data.name               工具名称
     * @apiSuccess {String} data.desc               简介
     * @apiSuccess {String} data.file_url           文件url
     * @apiSuccess {String} data.file_name          源文件名
     * @apiSuccess {Array}  data.tag_arr            标签
     * @apiSuccess {Array}  data.category_arr       分类
     * @apiSuccess {Array}  data.image_num          图片数
     * @apiSuccess {Array}  data.video_num          视频数
     * @apiSuccess {Array}  data.is_set_water       是否设置水印【1是、0否】
     * @apiSuccess {Array}  data.file_arr           图片+视频
     * @apiSuccess {Number} data.file_arr.id        ID
     * @apiSuccess {Number} data.file_arr.type      类型【1图片、2视频】
     * @apiSuccess {String} data.file_arr.file_url  url
     * @apiSuccess {String} data.file_arr.thumb_url 缩略图url【type=2存在】
     * @apiSuccess {Number} data.file_arr.download_num 下载次数
     */
    public function actionInfo()
    {
        $params = Yii::$app->request->get();
        $id = $params['id'] ?? 0;

        // 查询结果
        $service = new ToolService();
        return $service->getInfo((int)$id);
    }

    /**
     * @api {get} /v1/buss/tool/edit-info 工具详情【新增、编辑】
     * @apiName edit-info
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiParam {Number} id 工具ID【新增ID不传，编辑必传ID】
     *
     * @apiSuccess {Object} data                    返回数据
     * @apiSuccess {Number} data.id                 ID
     * @apiSuccess {Number} data.project_id         项目ID
     * @apiSuccess {String} data.name               工具名称
     * @apiSuccess {Array}  data.tag_ids            标签IDs
     * @apiSuccess {String} data.desc               简介
     * @apiSuccess {String} data.file               文件【传参用】
     * @apiSuccess {String} data.file_name          源文件名
     * @apiSuccess {String} data.file_url           文件url
     * @apiSuccess {Array}  data.image              图片【{file:'', file_url: ''}】
     * @apiSuccess {Array}  data.video              视频【{file:'', file_url: '', thumb_url: ''}】
     * @apiSuccess {Array}  data.support_type       上传附件支持格式
     * @apiSuccess {Array}  data.support_image_type 上传图片支持格式
     * @apiSuccess {Array}  data.support_video_type 上传视频支持格式
     * @apiSuccess {Object} data.condition          筛选条件
     * @apiSuccess {Array}  data.condition.tag      标签
     * @apiSuccess {Array}  data.condition.project  项目
     * @apiSuccess {Array}  data.condition.category 分类
     * @apiSuccess {Array}  data.condition.age      年龄
     */
    public function actionEditInfo()
    {
        $params = Yii::$app->request->get();
        $id = $params['id'] ?? 0;

        // 查询结果
        $service = new ToolService();
        return $service->getEditInfo((int)$id);
    }

    /**
     * @api {post} /v1/buss/tool/create 新增工具
     * @apiName create
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiBody {Number} project_id     项目ID
     * @apiBody {String} name           工具名称
     * @apiBody {String} desc           简介
     * @apiBody {Array}  tags           标签【{value: 1, label: '存在标签'},{value: 0, label: '新增标签'}】
     * @apiBody {String} file           文件名
     * @apiBody {Array}  image          图片
     * @apiBody {Array}  video          视频
     * @apiBody {Number} age_id         年龄
     * @apiBody {Array}  category_ids   分类IDs
     *
     * @apiSuccess {Object} data            返回数据
     * @apiSuccess {Number} data.id         工具ID
     */
    public function actionCreate()
    {
        $params = Yii::$app->request->post();
        $params['tags'] = $params['tags'] ?? [];
        $params['image'] = $params['image'] ?? [];
        $params['video'] = $params['video'] ?? [];
        $params['category_ids'] = $params['category_ids'] ?? [];

        $model = new ToolForm();
        $model->setScenario('create');
        $model->attributes = $params;
        if (!$model->validate()) {
            // 返回数据验证失败
            return CommonHelper::api(422, $this->getError($model));
        }

        $service = new ToolService();
        return $service->create($model);
    }

    /**
     * @api {post} /v1/buss/tool/update 编辑工具
     * @apiName update
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiBody {Number} id             工具ID
     * @apiBody {Number} project_id     项目ID
     * @apiBody {String} name           工具名称
     * @apiBody {String} desc           简介
     * @apiBody {Array}  tags           标签【{value: 1, label: '存在标签'},{value: 0, label: '新增标签'}】
     * @apiBody {String} file           文件名
     * @apiBody {Array}  image          图片
     * @apiBody {Array}  video          视频
     * @apiBody {Number} age_id         年龄
     * @apiBody {Array}  category_ids   分类IDs
     *
     * @apiSuccess {Object} data            返回数据
     * @apiSuccess {Number} data.id         工具ID
     */
    public function actionUpdate()
    {
        $params = Yii::$app->request->post();
        $params['tags'] = $params['tags'] ?? [];
        $params['image'] = $params['image'] ?? [];
        $params['video'] = $params['video'] ?? [];
        $params['category_ids'] = $params['category_ids'] ?? [];

        $model = new ToolForm();
        $model->setScenario('edit');
        $model->attributes = $params;
        if (!$model->validate()) {
            // 返回数据验证失败
            return CommonHelper::api(422, $this->getError($model));
        }

        $service = new ToolService();
        return $service->edit($model);
    }

    /**
     * @api {post} /v1/buss/tool/delete 删除工具
     * @apiName delete
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiBody {Number} id                工具ID
     *
     * @apiSuccess {Object} data            返回数据
     * @apiSuccess {Number} data.id         工具ID
     */
    public function actionDelete()
    {
        $params = Yii::$app->request->post();

        $model = new ToolForm();
        $model->setScenario('delete');
        $model->attributes = $params;
        if (!$model->validate()) {
            // 返回数据验证失败
            return CommonHelper::api(422, $this->getError($model));
        }

        $service = new ToolService();
        return $service->delete($model);
    }

    /**
     * @api {get} /v1/buss/tool/download 下载【附件 or 图片\视频】
     * @apiName download
     * @apiGroup Tool
     * @apiUse CommonParam
     *
     * @apiParam {Number} id 工具ID
     * @apiParam {Array}  file_ids 下载文件IDs【数组 or string 多个用\',\'分割~download_type=\'other\'必传】
     * @apiParam {String} download_type 下载类型【附件：attachment、其他：other】
     * @apiParam {Number} is_water 是否下载水印图【1是、0否】
     *
     * @apiSuccess {Object} data                    返回数据
     */
    public function actionDownload()
    {
        $params = Yii::$app->request->get();
        $data = json_decode(base64_decode($params['playload'] ?? ''), true);

        $params['id'] = $data['id'] ?? 0;
        $params['download_type'] = $data['download_type'] ?? 'other';
        $params['file_ids'] = $data['file_ids'] ?? [];
        $params['is_water'] = $data['is_water'] ?? 0;

        $model = new ToolForm();
        $model->setScenario('download');
        $model->attributes = $params;
        if (!$model->validate()) {
            // 返回数据验证失败
            return CommonHelper::api(422, $this->getError($model));
        }

        // 查询结果
        $service = new ToolService();
        return $service->download($model, (int)$params['is_water']);
    }
}
